home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 9 / FM Towns Free Software Collection 9.iso / t_os / shell / tsbgex / src / win / move.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-11-16  |  1.0 KB  |  54 lines

  1. #include "win.h"
  2.  
  3. move(w, x, y)
  4. struct window *w;
  5. int x, y;
  6. {
  7.     char work[MAXSIZE];
  8.     int ox, oy, ox2, oy2, x2, y2;
  9.     extern void expose(), save(), memcpy(), show();
  10.     
  11.     ox = w->x;
  12.     oy = w->y;
  13.     ox2 = w->x2;
  14.     oy2 = w->y2;
  15.     x2 = x + w->w - 1;
  16.     y2 = y + w->h - 1;
  17.     if (!w->mapped){
  18.         w->x = x;
  19.         w->y = y;
  20.         w->x2 = x2;
  21.         w->y2 = y2;
  22.         return (0);
  23.     }
  24.     if (oy <= y2  &&  y2 <= oy2){
  25.         if (ox <= x2  &&  x2 < ox2)
  26.             expose(work, w, x2+1, oy, ox2, y2);
  27.         else if (ox < x  &&  x <= ox2)
  28.             expose(work, w, ox, oy, x-1, y2);
  29.         else
  30.             goto NONOVERLAP;
  31.         expose(work, w, ox, y2+1, ox2, oy2);
  32.     } else if (oy <= y  &&  y <= oy2){
  33.         if (ox <= x2  &&  x2 < ox2)
  34.             expose(work, w, x2+1, y, ox2, oy2);
  35.         else if (ox < x  &&  x <= ox2)
  36.             expose(work, w, ox, y, x-1, oy2);
  37.         else
  38.             goto NONOVERLAP;
  39.         expose(work, w, ox, oy, ox2, y-1);
  40.     } else {
  41. NONOVERLAP:
  42.         expose(work, w, ox, oy, ox2, oy2);
  43.     }
  44.  
  45.     save(work, x, y, x2, y2);
  46.     memcpy(w->save, work, w->size);
  47.     w->x = x;
  48.     w->y = y;
  49.     w->x2 = x2;
  50.     w->y2 = y2;
  51.     show(work, w);
  52.     return (0);
  53. }
  54.